﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using FluentNHibernate.Conventions;

namespace Business.Entity.Contabil.Pessoa.SubClass.Cliente
{
    public class ClienteRepository : RepositoryBase<Cliente>
    {
        public static void Save(Cliente cliente)
        {
            var s = GetSession();
            var t = s.BeginTransaction();
            try
            {
                if (cliente.Pessoa == null)
                {
                    MessageBox.Show("Não é possível salvar um cliente sem informar a pessoa referênte ao cliente.");
                    return;
                }
                if ( cliente.Pessoa.Id == 0)
                {
                    s.Save(cliente.Pessoa);
                }
                s.Save(cliente);
                t.Commit();
            }
            catch (Exception)
            {
                t.Rollback();
                throw;
            }
        }

        public static IList<Cliente> GetByCpfCnpj(String cpfCnpj)
        {
            Pessoa pessoa = null;
            var list = GetQueryOver().JoinAlias(fornecedor => fornecedor.Pessoa, () => pessoa)
                .Where(() => pessoa.CpfCnpj == cpfCnpj).List();
            return list;
        }

        public static Cliente GetUniqueByCpfCnpj(string cpfCnpj)
        {
            var list = GetByCpfCnpj(cpfCnpj);
            if (list.IsEmpty())
            {
                return null;
            }
            else
            {
                return list[0];
            }
        }
    }
}
